/*Author: Benny Vermonden c1025695 
 */

package core.logic.services.utilServices;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.JTextComponent;

public class ValidatieService {
	
	public static boolean tryParseInt(String value)  
	{  
	     try  
	     {  
	         Integer.parseInt(value);  
	         return true;  
	      } catch(NumberFormatException nfe)  
	      {  
	          return false;  
	      }  
	}
	
	
	public static boolean isPresent(JTextComponent c, String title)
	{
		String tekst = c.getText();
		if (c.getText().length() == 0)
		{
		    showMessage(c, title + " moet ingevuld zijn\n"
				+ "Gelieve in te geven.");
			c.requestFocusInWindow();
			return false;
		}
		return true;
	}
	
	public static boolean isInteger(JTextComponent c, String title)
	{
		try
		{
			int i = Integer.parseInt(c.getText());
			return true;
		}
		catch (NumberFormatException e)
		{
		    showMessage(c, title + " moet een getal zijn.\n"
				+ "Gelieve een getal in te geven.");
			c.requestFocusInWindow();
			return false;
		}
	}
	//Controle op positieve getallen
	//Lieven Drijkoningen
	
	public static boolean isPositiveInteger(JTextComponent c, String title)
	{
		try
		{
			int i = Integer.parseInt(c.getText());
			if(i<0)
			{
				showMessage(c, "Positief getal ingeven aub voor " + c.getName());;
				return false;
			}
			return true;
		}
		catch (NumberFormatException e)
		{
		    showMessage(c, title + " moet een getal zijn.\n"
				+ "Gelieve een getal in te geven.");
			c.requestFocusInWindow();
			return false;
		}
	}
	
	public static boolean isDouble(JTextComponent c, int precision, String title)
	{
		try
		{
			double d = Double.parseDouble(c.getText());			
			return true;
		}
		catch(NumberFormatException ex)
		{
			showMessage(c, title + " moet een getal zijn, gelieve een getal in te geven");
			c.requestFocusInWindow();
			return false;
		}
	}
	
	private static void showMessage(JTextComponent c, String message) {
		JOptionPane.showMessageDialog(c, message, "Fout", JOptionPane.ERROR_MESSAGE);
		
	}
	
	// @Author: Wijnen David [c1026300] 2013-11-23
	public static Boolean isPresentAndLength(JTextComponent textbox, int maxLengte, String titel)
	{
		// controleerd of een textbox wel ingevuld is, en de lengte van de invoer niet te lang is.
		if(!isPresent(textbox, titel)){
			return false;
		}
		
		if(!isLength(textbox, maxLengte, titel)){
			return false;
		}
		return true;
	}	
	// @Author: Wijnen David [c1026300] 2013-11-23
	public static boolean isLength(JTextComponent textbox, int maxLengte, String title)
	{
		// controleerd of de lengte van de invoer niet te lang is.
		if (textbox.getText().length() > maxLengte)
		{
		    showMessage(textbox, title + " ingave is te lang.\n"
				+ "Gelieve een waarde in te geven van maximum " + maxLengte + " karakters.");
		    textbox.requestFocusInWindow(); // focus op tekstbox met de fout
			return false;
		}
		return true;
	}
	
	// @Author: Bertels Nick [c1019387] 2013-11-25
	public static boolean isTijd(JTextComponent textbox, String title)
	{
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yy HH:mm");

		try 
		{
			Date date = format.parse(textbox.getText());
			return true;
		} catch (ParseException e) 
		{
		    showMessage(textbox, title + " heeft een foutief format.\n"
				+ "Gelieve de tijd als volgt in te geven dd/MM/yy HH:mm.");
			return false;
		}
	}
	
	// @Author: Bertels Nick [c1019387] 2013-11-25
	public static boolean isDouble(JTextComponent textbox, String title)
	{
		try
		{
			double d = Double.parseDouble(textbox.getText());
			return true;
		}
		catch (NumberFormatException e)
		{
		    showMessage(textbox, title + " moet een getal zijn.\n"
				+ "Gelieve een getal in te geven.");
			return false;
		}
	}
	
	public static boolean isLandCode(JTextField j, String r)
	{
		int lengteR = r.length();	
		int res = (lengteR-2) % 3;		
		if(res == 0)
		{
			return true;			
		}
		else
		{
			showMessage(j, "Geef landcodes in in volgend formaat: BE;NL;DE;...");
			return false;
		}		
		
	}

}
